#ifndef CPROC_ATTR_H
#define CPROC_ATTR_H

#include <unistd.h>
#include <signal.h>

class CProcessAttribute {
public:
	static pid_t m_siParentPid;		//父进程ID
	static pid_t m_siPid;			//进程ID
	static size_t m_snArgvNeedMem;	//保存下这些argv参数所需要的内存大小
	static size_t m_snEnvNeedMem;	//环境变量所占内存大小
	static int m_snOSArgc;			//参数个数
	static char** m_slpOSArgv;	//原始命令行参数数组,在main中会被赋值
	static char* m_slpEnvMem;	//指向自己分配的env环境变量的内存
	static int m_snDaemonized;	//守护进程标识
	static int m_snProcessType;	//进程类型
	static int m_snStopFlag;	//进程退出标识
	static sig_atomic_t m_snReap;	//标记子进程状态变化[一般是子进程发来SIGCHLD信号表示退出],sig_atomic_t:系统定义的类型：访问或改变这些变量需要在计算机的一条指令内完成
									//一般等价于int【通常情况下，int类型的变量通常是原子访问的，也可以认为 sig_atomic_t就是int类型的数据】                                   

	static void init(int argc, char **argv, int nProcessType);
	static void initProcTitle();
	static void setProcTitle(const char* lpTitle);
	static int becomeDaemon();
	static void deInit();

private:
	CProcessAttribute() = delete;
	~CProcessAttribute() = delete;
};

#endif